import axios from 'axios'
import { ElMessage } from 'element-plus'

// axios响应式拦截器
axios.interceptors.response.use(res => {
    if (res.status === 200) {
        return res.data;
    } else {
        return Promise.reject(res);
    }
}, error => {
    // 统一错误提示
    if (error.response && error.response) {
        switch (error.response.status) {
            case 400:
                error.message = '错误请求'
                break;
            case 401:
                error.message = '未授权，请重新登录'
                break;
            case 403:
                error.message = '拒绝访问'
                break;
            case 404:
                error.message = '请求错误,未找到该资源'
                window.location.href = "/NotFound"
                break;
            case 405:
                error.message = '请求方法未允许'
                break;
            case 408:
                error.message = '请求超时'
                break;
            case 500:
                error.message = '服务器端出错'
                break;
            case 501:
                error.message = '网络未实现'
                break;
            case 502:
                error.message = '网络错误'
                break;
            case 503:
                error.message = '服务不可用'
                break;
            case 504:
                error.message = '网络超时'
                break;
            case 505:
                error.message = 'http版本不支持该请求'
                break;
            default:
                error.message = `连接错误${error.response.status}`
        }
    } else {
        error.message = '连接服务器失败'
    }

    ElMessage.error(error.message)

    return Promise.reject(error.response)
})

const post = (url, data) => {
    return axios({
        method: 'post',
        url,
        data: data,
        timeout: 5000,
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        }
    })
}

const get = (url, params) => {
    return axios({
        method: 'get',
        url,
        params, // get 请求时带的参数
        timeout: 5000,
        headers: {
            'X-Requested-With': 'XMLHttpRequest',
        }
    })
}

const put = (url, data) => {
    return axios({
        method: 'put',
        url,
        data: data,
        timeout: 5000,
        headers: {
            'Content-Type': 'application/json;charset=utf-8'
        }
    })
}

const del = (url, data) => {
    return axios({
        method: 'delete',
        url,
        data: data,
        timeout: 5000,
        headers: {
            'Content-Type': 'application/json;charset=utf-8'
        }
    })
}

export default {
    post, get, put, del
}

